package smallfrench.moteur.biblio;

import smallfrench.moteur.interp.RObjet;

/**
 * Une interface décrivant une liste
 * 
 * @author antoine1023
 *
 */
public abstract class AListe extends AIterable {

	public static final AClasse CLASSE = AClasse.creer(AListe.class, "Liste");

	@AnnotationMembre
	public AListe() {
	}

	/**
	 * Ajoute l’objet passé en paramètre à la fin du tableau.
	 * @param nouveau
	 */
	@AnnotationMembre
	public abstract void ajouter(RObjet nouveau);

	/**
	 * Recherche l’index de l’élément passé en paramètre.
	 * @param cible
	 * @return L’index, ou -1 si non trouvé.
	 */
	@AnnotationMembre
	public abstract REntier indexDe(RObjet cible);

	/**
	 * Insère l’objet à l’index spécifié.
	 * @param index
	 * @param nouveau
	 */
	@AnnotationMembre
	public abstract void inserer(REntier index, RObjet nouveau);

	/**
	 * Modifie un élément de la liste
	 * @param index
	 * @param nouveau
	 * @return L’ancien élément remplacé
	 */
	@AnnotationMembre
	public abstract RObjet modifier(REntier index, RObjet nouveau);

	/**
	 * Obtient l’élément à l’index spécifié.
	 * @param index
	 * @return L’élément ou null si index invalide.
	 */
	@AnnotationMembre
	public abstract RObjet obtenir(REntier index);


	/**
	 * Retire de la liste l’élément à l’index spécifié.
	 * @param index
	 * @return L’élément ou null si index invalide.
	 */
	@AnnotationMembre
	public abstract RObjet retirer(REntier index);

	/**
	 * @return La taille de la liste.
	 */
	@AnnotationMembre
	public abstract REntier taille();

}
